//package com.kanq.service.rabbitmq;
//
//import com.alibaba.fastjson.JSONObject;
//import com.rabbitmq.client.*;
//
//import java.io.IOException;
//import java.util.List;
//import java.util.Map;
//import java.util.concurrent.TimeoutException;
//
///**
// * @Author cheng jun
// * @Description:
// * @Date 2021/7/11 14:39
// */
//public class Consumer2 {
//
//    public static void main(String[] args) throws IOException, TimeoutException {
//        // 创建连接mq的工厂对象
//        ConnectionFactory connectionFactory = new ConnectionFactory();
//        // 创建连接mq的主机
//        connectionFactory.setHost("127.0.0.1");
//        // 设置端口号
//        connectionFactory.setPort(5672);
//        // 设置连接哪个虚拟主机
//        connectionFactory.setVirtualHost("/ems");
//        // 设置访问虚拟主机的用户名和密码
//        connectionFactory.setUsername("ems");
//        connectionFactory.setPassword("ems");
//
//        // 获取连接对象(补全对象 ctrl+alt+v)
//        Connection connection = connectionFactory.newConnection();
//        // 获取连接通道
//        Channel channel = connection.createChannel();
//        // 每次只能消费一个
//        channel.basicQos(1);
//        // 通道绑定消息队列
//        // 参数1：队列名称
//        // 参数2：是否持久化 true是持久化 false是不持久化
//        // 参数3：是否独占队列 true是独占 false是不独占
//        // 参数4：是否在消费完后自动删除队列，true是自动删除 false是不自动删除
//        // 参数5：附加参数
//        //channel.queueDeclare("hello", false, false, false, null);
//
//        // 通道绑定交换机
//        // 参数1：交换机名字
//        // 参数2：交换机类型（fanout:广播模型,direct:路由模型）
//        channel.exchangeDeclare("topics", "topic");
//
//        // 临时队列
//        String queneName = channel.queueDeclare().getQueue();
//
//        // routingKey
//        String routingKey = "user.#";
//
//        // 绑定交换机和队列
//        channel.queueBind(queneName, "topics", routingKey);
//
//        // 消费消息
//        //参数1:消费的那个队列的名称
//        // 参数2：开始消息的自动确认机制
//        // 参数3：开始消费的回调接口
//        channel.basicConsume(queneName, false, new DefaultConsumer(channel) {
//            //最后一个参数:消息队列中取出的消息
//            @Override
//            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
//                //System.out.println("消费的内容：" + new String(body));
//                List<Map<String, Object>> list = (List<Map<String, Object>>) JSONObject.parse(body);
//                list.forEach(item -> {
//                    System.out.println(item.get("aaa"));
//                    System.out.println(item.get("bbb"));
//                });
//                // 手动消息确认
//                // 参数1：确认队列里的那个消息
//                // 参数2：是否开启多个消息同时确认
//                channel.basicAck(envelope.getDeliveryTag(), false);
//            }
//        });
//
//        // 关闭资源
//        //channel.close();
//        //connection.close();
//    }
//}
